// #include<iostream>
// #include<string>
// #include<functional>
// using namespace std;
// /***
//  *
//  *重载应用场景分析
//  *类中类的访问
//  *
//  */
//
// class A {
//     public:
// protected:
// public:
//     class B {
//         public:
//         void print() {
//             cout<<"A::B::print"<<endl;
//         }
//     };
// };
//
// void test_class() {
//     A::B a;
//     a.print();
//     auto p = new A::B;
//     p->print();
// }
//
// struct Node {
//     int data;
//     Node *next;
//     Node();
//     Node(int d,Node* next=nullptr):data(d),next(next){}
// };
//
// class List {
//     public:
//     List():head(nullptr),tail(nullptr),size(0) {
//
//     }
//
//     void push_front(int data) {
//         Node* node=new Node(data);
//         if (size == 0) {
//             head = node;
//             tail = head;
//         }else {
//             tail->next = node;
//             tail = tail->next;
//         }
//         size++;
//     }
//     void print_list() {
//         Node *p = head;
//         while (p!=nullptr) {
//             cout<<p->data<<" ";
//             p = p->next;
//         }
//         cout<<endl;
//     }
//
//
//     protected:
//     Node *head;
//     Node *tail;
//     int size;
//
// public:
//     Node* begin() {
//         return head;
//     }
//     Node* end() {
//         return nullptr;
//     }
//     class iterator {
//         public:
//         iterator(Node *p=nullptr):p(p){}
//         void operator==(Node* node) {
//             this->p = node;
//         }
//         bool operator!=(Node* node) {
//             return this->p != node;
//         }
//         iterator operator++() {
//            return iterator(p=p->next);
//         }
//         int operator*() {
//             return p->data;
//         }
//
//
//
//     protected:
//         Node *p;
//     };
// };
//
// void test_list() {
//     List l;
//     l.push_front(1);
//     l.push_front(2);
//     l.push_front(3);
//     l.print_list();
//
//     List::iterator iter;
//     for (iter = l.begin();iter != l.end();++iter) {
//         cout<<*iter<<endl;
//     }
//
//
// }
//
// //函数包装器 把函数指针包装成一个对象
// int max(int a,int b) {
//     return a>b?a:b;
// }
//
// class Function {
// public:
//     using FUNC = int(*)(int,int);
//     Function(FUNC pFunc=nullptr):pFunc(pFunc) {
//
//     }
//     int operator()(int a,int b){
//       return   pFunc(a,b);
//     }
//
// protected:
//     FUNC pFunc;
// };
//
// //仿函数 对象模仿函数调用的行为
// //重载括号运算符接口
// //比较准则
// class MM {
//     public:
//     MM(int age):age(age) {
//
//     }
//     int mage()const {
//         return age;
//     }
// protected:
//     int age;
// };
//
// struct Less {
//     bool operator()(const MM &a,const MM &b) {
//         return a.mage() < b.mage();
//     }
// };
//
// void test_function() {
//     Function f(&max);
//     cout << max(10,5) << endl;
//     cout << f(1,2) << endl;
// }
// void test_function1() {
//    MM one(1);
//     MM two(2);
//     Less less;
//     less.operator()(one,two);
//     Less{}(one,two);
// }
//
//
// int main() {
//
//     // test_class();
//     //
//     // string str("loveyuou");
//     // string::iterator iter;
//     // for (iter = str.begin(); iter != str.end(); iter++) {
//     //     cout << *iter << endl;
//     // }
//
//     // test_list();
//
//     test_function();
//
//
//
//     return 0;
// }